---
sidebar_position: 2
---

# Передача многомерного массива в функцию с помощью параметров

:::danger

Статья доделывается. Взята как есть из предыдущей версии методики.

:::

При необходимости передать в функцию многомерный массив с помощью параметра возникают неудобства, связанные с отсутствием в Си++ и Си объектов типа многомерный массив. Если мы описываем массив с несколькими индексами, например,

```cpp
double arr[6][4][2];
```

то это не трехмерный массив, а одномерный массив с именем arr, состоящий из 6 элементов, каждый из которых имеет тип `double [4][2]`. В свою очередь, каждый из этих элементов есть одномерный массив из четырех элементов типа `double [2]`. И, наконец, каждый из этих элементов является  массивом из двух элементов типа double.

Очевидное и неверное решение при попытке передать в функцию матрицу – определить её заголовок следующим образом:

```cpp
void func(double x[][], int n)
```

Здесь `n` – предполагаемый порядок квадратной матрицы; `double x[][]` – попытка определить двухмерный массив с заранее неизвестными параметрами. На такую попытку транслятор ответит сообщением об ошибке:

```cpp
Error…: Size of type is unknown or zero.
```

Вспомним – массив всегда одномерный, а его элементы должны иметь известную и фиксированную длину. В массиве `double x[][]` не только неизвестно количество элементов одномерного массива (это допустимо и их можно передать параметром `int n`), но ничего не известно о размерах этих элементов. Допустимое с точки зрения синтаксиса языка Си++ решение - `void func(double x[][4], int n)`.
Нежизненность такого решения – необходимость фиксации второй размерности матрицы.

Указанные ограничения на возможность применения многомерных массивов в качестве параметров функции можно обойти двумя путями.
 Первый путь – подмена многомерного массива, например, `double x[3][4]` одномерным `double x[12]` и имитация внутри функции доступа к нему как к многомерному массиву.

Второй путь – использование вспомогательных одномерных массивов указателей на массивы. Такой массив указателей на строки матрицы используется при создании динамических массивов.

Помните, что если размерность массива явно не указана, то в функцию с помощью параметров можно передавать только одномерные массивы.
